package com.gill.touka.sentinel.rule;

import com.alibaba.csp.sentinel.adapter.servlet.callback.UrlCleaner;
import org.apache.commons.lang.math.NumberUtils;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * 测试功能：UrlCleaner重新定义资源，将shares/1、shares/2这样不同的资源，修改成shares/{number}，这样就不需要为每个资源都配置1个规则
 * 测试方式：访问shares/1，为 shares/{number} 添加授权规则，接着访问shares/2  shares/3之类的资源
 */
@Component
public class MyUrlCleaner implements UrlCleaner {

    /**
     * @param url：类似 shares/1、shares/2等路径
     */
    @Override
    public String clean(String url) {
        String[] split = url.split("/");
        return Arrays.stream(split)
                .map(string -> {
                    if(NumberUtils.isNumber(string)){
                        return "{number}";
                    }
                    return string;
                })
                .reduce((a,b) -> a+"/"+b)
                .orElse("");
    }
}
